class Solution {
private:
    vector<bool> vis;
public:
    bool dfs(const string& str,int len,int sum){
        if(len==str.size()){
            return (sum&(sum-1))==0;
        }
        for(int i=0;i<str.size();++i){
            if(sum==0 && str[i]=='0' || vis[i]){
                continue;
            }
            vis[i]=true;
            if(dfs(str,len+1,sum*10+str[i]-'0')){
                return true;
            }
            vis[i]=false;
        }
        return false;
    }
    bool reorderedPowerOf2(int n) {
        
        string str=to_string(n);
        vis.resize(str.size());
        sort(str.begin(),str.end());

        return dfs(str,0,0);
    }
};
